# `curl_config.h` generation. {{

config_h = configure_file(
  configuration: cdata,
  input: '../meson/curl_config.h.meson',
  output: 'curl_config.h',
)

add_project_arguments(
  '-DHAVE_CONFIG_H',
  language: 'c',
)

# }}}

# To update this list: `make -f meson/rewrite.mk curl_lib_src`.
curl_lib_src = files(
  'altsvc.c',
  'amigaos.c',
  'asyn-ares.c',
  'asyn-thread.c',
  'base64.c',
  'bufq.c',
  'bufref.c',
  'cf-h1-proxy.c',
  'cf-h2-proxy.c',
  'cf-haproxy.c',
  'cf-https-connect.c',
  'cf-socket.c',
  'cfilters.c',
  'conncache.c',
  'connect.c',
  'content_encoding.c',
  'cookie.c',
  'curl_addrinfo.c',
  'curl_des.c',
  'curl_endian.c',
  'curl_fnmatch.c',
  'curl_get_line.c',
  'curl_gethostname.c',
  'curl_gssapi.c',
  'curl_memrchr.c',
  'curl_multibyte.c',
  'curl_ntlm_core.c',
  'curl_range.c',
  'curl_rtmp.c',
  'curl_sasl.c',
  'curl_sha512_256.c',
  'curl_sspi.c',
  'curl_threads.c',
  'curl_trc.c',
  'cw-out.c',
  'dict.c',
  'dllmain.c',
  'doh.c',
  'dynbuf.c',
  'dynhds.c',
  'easy.c',
  'easygetopt.c',
  'easyoptions.c',
  'escape.c',
  'file.c',
  'fileinfo.c',
  'fopen.c',
  'formdata.c',
  'ftp.c',
  'ftplistparser.c',
  'getenv.c',
  'getinfo.c',
  'gopher.c',
  'hash.c',
  'headers.c',
  'hmac.c',
  'hostasyn.c',
  'hostip.c',
  'hostip4.c',
  'hostip6.c',
  'hostsyn.c',
  'hsts.c',
  'http.c',
  'http1.c',
  'http2.c',
  'http_aws_sigv4.c',
  'http_chunks.c',
  'http_digest.c',
  'http_negotiate.c',
  'http_ntlm.c',
  'http_proxy.c',
  'httpsrr.c',
  'httpsrr.c',
  'idn.c',
  'if2ip.c',
  'imap.c',
  'inet_ntop.c',
  'inet_pton.c',
  'krb5.c',
  'ldap.c',
  'llist.c',
  'macos.c',
  'md4.c',
  'md5.c',
  'memdebug.c',
  'mime.c',
  'mprintf.c',
  'mqtt.c',
  'multi.c',
  'netrc.c',
  'nonblock.c',
  'noproxy.c',
  'openldap.c',
  'parsedate.c',
  'pingpong.c',
  'pop3.c',
  'progress.c',
  'psl.c',
  'rand.c',
  'rename.c',
  'request.c',
  'rtsp.c',
  'select.c',
  'sendf.c',
  'setopt.c',
  'sha256.c',
  'share.c',
  'slist.c',
  'smb.c',
  'smtp.c',
  'socketpair.c',
  'socks.c',
  'socks_gssapi.c',
  'socks_sspi.c',
  'speedcheck.c',
  'splay.c',
  'strcase.c',
  'strdup.c',
  'strerror.c',
  'strparse.c',
  'strparse.c',
  'strtok.c',
  'strtoofft.c',
  'system_win32.c',
  'telnet.c',
  'tftp.c',
  'timediff.c',
  'timeval.c',
  'transfer.c',
  'url.c',
  'urlapi.c',
  'vauth/cleartext.c',
  'vauth/cram.c',
  'vauth/digest.c',
  'vauth/digest_sspi.c',
  'vauth/gsasl.c',
  'vauth/krb5_gssapi.c',
  'vauth/krb5_sspi.c',
  'vauth/ntlm.c',
  'vauth/ntlm_sspi.c',
  'vauth/oauth2.c',
  'vauth/spnego_gssapi.c',
  'vauth/spnego_sspi.c',
  'vauth/vauth.c',
  'version.c',
  'version_win32.c',
  'vquic/curl_msh3.c',
  'vquic/curl_ngtcp2.c',
  'vquic/curl_osslq.c',
  'vquic/curl_quiche.c',
  'vquic/vquic-tls.c',
  'vquic/vquic.c',
  'vssh/curl_path.c',
  'vssh/libssh.c',
  'vssh/libssh2.c',
  'vssh/wolfssh.c',
  'vtls/bearssl.c',
  'vtls/cipher_suite.c',
  'vtls/gtls.c',
  'vtls/hostcheck.c',
  'vtls/keylog.c',
  'vtls/mbedtls.c',
  'vtls/mbedtls_threadlock.c',
  'vtls/openssl.c',
  'vtls/rustls.c',
  'vtls/schannel.c',
  'vtls/schannel_verify.c',
  'vtls/sectransp.c',
  'vtls/vtls.c',
  'vtls/vtls_scache.c',
  'vtls/vtls_spack.c',
  'vtls/wolfssl.c',
  'vtls/x509asn1.c',
  'warnless.c',
  'ws.c',
)

curl_lib = library(
  'curl',
  config_h,
  curl_lib_src,
  c_args: ['-DBUILDING_LIBCURL', curl_symbols_hiding_flags, public_args],
  dependencies: [lib_deps, sys_deps],
  gnu_symbol_visibility: curl_symbols_hiding_visibility,
  include_directories: [CURL_PUBLIC_INC, CURL_INTERNAL_INC],
  install: true,
  version: '4.8.0',
)

pkg.generate(
  curl_lib,
  description: 'Library to transfer files with ftp, http, etc.',
  extra_cflags: public_args,
  name: 'libcurl',
  unescaped_variables: (
  # NOTE: variables with empty values are not allowed…
    (enabled_features.length() > 0 ? {
        'supported_features': ' '.join(enabled_features),
      } : {}) + (enabled_protocols.length() > 0 ? {
        'supported_protocols': ' '.join(enabled_protocols),
      } : {})
  ),
  url: 'https://curl.se/',
)

curl_dep = declare_dependency(
  compile_args: public_args,
  include_directories: CURL_PUBLIC_INC,
  link_with: curl_lib,
  sources: config_h,
)

meson.override_dependency('libcurl', curl_dep)

lib_deps_iflags = []
foreach _dep : lib_deps
  lib_deps_iflags += _dep.partial_dependency(
    compile_args: true,
    includes: true,
  )
endforeach

curl_iflags_dep = declare_dependency(
  dependencies: lib_deps_iflags,
  include_directories: [CURL_PUBLIC_INC, CURL_INTERNAL_INC],
)

curl_ilib_dep = declare_dependency(
  dependencies: [curl_dep, curl_iflags_dep, sys_deps],
)

curlu_flags = ['-DCURL_STATICLIB', '-DUNITTESTS']

curlu_lib = static_library(
  'curlu',
  config_h,
  curl_lib_src,
  c_args: [curlu_flags, '-DBUILDING_LIBCURL'],
  dependencies: [build_unittests, lib_deps],
  include_directories: [CURL_PUBLIC_INC, CURL_INTERNAL_INC],
)

curlu_dep = declare_dependency(
  dependencies: sys_deps,
  include_directories: [CURL_INTERNAL_INC, CURL_PUBLIC_INC],
  link_with: curlu_lib,
  sources: config_h,
)

# vim: foldmethod=marker foldlevel=0
